﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;

namespace DHQGHN.PM0.Models.Admin
{
    public class AdmUnitModel
    {
        public string Adm_Unit_Id { get; set; }

        [Remote("CheckExistAdmUnitName", "AdmUnit", ErrorMessage = "AdmUnitNameExist", HttpMethod = "POST", AdditionalFields = "Adm_Unit_Id")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Bạn chưa nhập tên đơn vị hành chính ")]
        [StringLength(100, ErrorMessage = "Độ dài tối đa là 100 ký tự")]
        [Display(Name = "Tên đơn vị hành chính ")]
        public string Adm_Name { get; set; }

        [Remote("CheckExistAdmUnitCode", "AdmUnit", ErrorMessage = "AdmUnitCodeExist", HttpMethod = "POST", AdditionalFields = "Adm_Unit_Id")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Bạn chưa nhập mã đơn vị hành chính ")]
        [Display(Name = "Mã đơn vị hành chính ")]
        [StringLength(12, ErrorMessage = "Độ dài tối đa là 12 ký tự")]
        public string Code { get; set; }

        [Display(Name = "Mã đơn vị hành chính cha ")]
        public string P_Code { get; set; }

        [Display(Name = "Loai đơn vị hành chính ")]
        [Required(ErrorMessage = "Bạn chưa chọn loại DVHC")]
        public string Adm_Type { get; set; }

        [Display(Name = "Cấp đơn vị hành chính")]
        [Required(ErrorMessage= "Bạn chưa chọn cấp DVHC")]
        //[Range(1, 3, ErrorMessage="Bạn chưa chọn cấp ĐVHC")]
        public int? Levels { get; set; }

        [Display(Name = "Mã tỉnh ")]
        [StringLength(2, ErrorMessage = "Độ dài tối đa là 2 kí tự ")]
        public string Province_Code { get; set; }

        [Display(Name = "Mã huyện ")]
        [StringLength(3, ErrorMessage = "Độ dài tối đa là 3 kí tự ")]
        public string District_Code { get; set; }

        [Display(Name = "Mã xã ")]
        [StringLength(5, ErrorMessage = "Độ dài tối đa là 5 kí tự ")]
        public string Commune_Code { get; set; }

        [Display(Name = "Tên tỉnh")]
        [StringLength(50, ErrorMessage = "Độ dài tối đa là 50 kí tự ")]
        public string Province_Name { get; set; }

        [Display(Name = "Tên huyện")]
        [StringLength(50, ErrorMessage = "Độ dài tối đa là 50 kí tự ")]
        public string District_Name { get; set; }

        [Display(Name = "Tên xã ")]
        [StringLength(50, ErrorMessage = "Độ dài tối đa là 50 kí tự ")]
        public string Commune_Name { get; set; }

        [Display(Name = "Mô tả")]
        [StringLength(1000, ErrorMessage = "Độ dài tối đa là 1000 ký tự")]
        public string Descriptions { get; set; }
        public int RecordCount { get; set; }
        public int Deleted { get; set; }
        //dua ra cac truongco trong bang 
        #region Field list from database
        public const string FIELD_ADM_UNIT_ID = "ADM_UNIT_ID";
        public const string FIELD_CODE = "CODE";
        public const string FIELD_P_CODE = "P_CODE";
        public const string FIELD_ADM_TYPE = "ADM_TYPE";
        public const string FIELD_LEVELS = "LEVELS";
        public const string FIELD_PROVINCE_CODE = "PROVINCE_CODE";
        public const string FIELD_DISTRICT_CODE = "DISTRICT_CODE";
        public const string FIELD_COMMUNE_CODE = "COMMUNE_CODE";
        public const string FIELD_ADMINIS_NAME = "ADM_NAME";
        public const string FIELD_PROVINCE_NAME = "PROVINCE_NAME";
        public const string FIELD_DISTRICT_NAME = "DISTRICT_NAME";
        public const string FIELD_COMMUNE_NAME = "COMMUNE_NAME";
        public const string FIELD_DESCRIPTIONS = "DESCRIPTIONS";
        public const string FIELD_DELETED = "DELETED";
        public const string FIELD_RECORD_COUNT = "RecordCount";

        #endregion

        public AdmUnitModel()
        {
            // TODO: Complete member initialization
        }

        public AdmUnitModel(DAL.Models.Admin.AdmUnitModel model)
        {
            // TODO: Complete member initialization
            Adm_Unit_Id = model.Adm_Unit_Id;
            Code = model.Code;
            Adm_Name = model.Adm_Name;
            P_Code = model.P_Code;
            Adm_Type = model.Adm_Type;
            Levels = model.Levels;
            Province_Code = model.Province_Code;
            District_Code = model.District_Code;
            Commune_Code = model.Commune_Code;
            Province_Name = model.Province_Name;
            District_Name = model.District_Name;
            Commune_Name = model.Commune_Name;
            Descriptions = model.Descriptions;
            RecordCount = model.RecordCount;
            Deleted = model.Deleted;
           
        }


        internal DAL.Models.Admin.AdmUnitModel toDALModel()
        {
            DAL.Models.Admin.AdmUnitModel model = new DAL.Models.Admin.AdmUnitModel
            {
                Adm_Unit_Id = Adm_Unit_Id,
                Code = Code,
                Adm_Name = Adm_Name,
                P_Code = P_Code,
                Adm_Type = Adm_Type,
                Levels = Levels,
                Province_Code = Province_Code,
                District_Code = District_Code,
                Commune_Code = Commune_Code,
                Province_Name = Province_Name,
                Commune_Name = Commune_Name,
                District_Name = District_Name,
                Descriptions = Descriptions,
                RecordCount = RecordCount,
                Deleted = Deleted
            };
            return model;
        }
    }
}
